home *** CD-ROM | disk | FTP | other *** search
Text File | 1989-05-01 | 4.7 KB | 184 lines | [TEXT/MPS ] |
- % ---------------------------------------------------------------------------
- % Class MACMenu
- %
- % In this module you find the programmers interface to Menus.
- % It is built on top of the TOOLBOX routines in TOOLBOXmenus.
- % For a description of the routines see Inside Macintosh, chapter 11.
- %
- % 890317/Boris Magnusson
- % 890330/Göran Eriksson
- %
- % ---------------------------------------------------------------------------
-
- external class toolboxmenu="::SInterfaces:toolboxmenu";
- external class macmenuItem="::SInterfaces:macMenuItem";
-
- external text procedure Text_String="::SInterfaces:Text_String";
- external text procedure String_Text="::SInterfaces:String_Text";
- MacBasicMenu class MACMenu;
- virtual: procedure doMenu is
- procedure doMenu(menuid,item);integer menuid,item;;
- begin
- integer NIL=0;
- ref(toolboxmenu) TRAP;
- short integer MenuId; ! MenuId - the "name" of the Menu ;
-
- procedure doMenu(menuid,item); integer menuid,item;
- inspect findItem(item) do
- doMenu(menuid,item);
-
- % function NewMenu(menuId: INTEGER; menuTitle: Str255): MenuHandle;
- procedure NewMenu(Id, menuTitle);
- short integer Id; text menuTitle;
- begin
- text temp;
- temp:-Text_string(MenuTitle);
- MenuHandle:=TRAP.ToolboxNewMenu(Id, temp);
- MenuId:=Id;
- end;
-
- % FUNCTION GetMenu(rsrcID: INTEGER): MenuHandle;
- Boolean procedure GetMenu(rsrcID);
- short integer rsrcID;
- begin
- short integer NumberOfItems, i;
- MenuHandle:=TRAP.ToolboxGetMenu(rsrcID);
- MenuId:=rsrcId;
- if MenuHandle<>NIL then
- begin
- ! insert all item notices in Q !!;
- NumberOfItems:=CountMItems;
- for i:= 1 step 1 until NumberOfItems do
- new ItemNotice.into(itemsQ);
- getMenu:=true;
- end;
- end;
-
- % PROCEDURE DisposeMenu(menu: MenuHandle);
- PROCEDURE DisposeMenu;
- begin
- TRAP.ToolboxDisposeMenu(MenuHandle);
- end;
-
- procedure registerItem(anItem,index);
- ref(macMenuitem) anitem; integer index;
- begin
- ref(itemNotice) Notice;
- notice:-ItemNo(index);
- notice.theitem:-anItem;
- anItem.partOf:-this macMenu;
- anItem.MyNo:=index;
- end;
-
- ref(macMenuItem) procedure FindItem(index); integer index;
- begin
- ref(itemNotice) Notice;
- Notice:-itemno(index);
- if Notice =/= none then
- finditem:-Notice.theitem;
- end;
-
- % PROCEDURE AppendMenu(menu: MenuHandle; data: Str255);
- PROCEDURE AppendMenu( data);
- text data;
- begin
- text temp;
- temp:-text_string(data);
- TRAP.toolboxAppendMenu(MenuHandle, temp);
- new itemNotice.into(itemsQ);
- end;
-
-
- % PROCEDURE AddResMenu(menu: MenuHandle; theType: ResType);
- % ResType = PACKED ARRAY [1..4] OF CHAR;
- PROCEDURE AddResMenu( theType);
- text theType;
- begin
- integer theInteger;
- theInteger:=OsType(theType);
- TRAP.toolboxAddResMenu(MenuHandle, theInteger);
- new itemNotice.into(itemsQ);
- end;
-
-
- % PROCEDURE InsertResMenu(menu: MenuHandle; theType: ResType;
- % afterItem: INTEGER);
- PROCEDURE InsertResMenu(theType, afterItem);
- text theType; short integer afterItem;
- begin
- integer theInteger;
- theInteger:=OsType(theType);
- TRAP.toolboxInsertResMenu(menuHandle, theInteger, afterItem);
- new itemNotice.intoafter(afteritem);
- end;
-
-
- % FUNCTION CountMItems(menu: MenuHandle): INTEGER;
- short integer procedure CountMItems;
- CountMItems:=TRAP.toolboxCountMItems(menuHandle);
-
- % PROCEDURE CalcMenuSize(menu: MenuHandle);
- PROCEDURE CalcMenuSize;
- TRAP.toolboxCountMItems(menuHandle);
-
- % {new 128K ROM}
-
- % PROCEDURE InsMenuItem(theMenu: MenuHandle; itemString: Str255;
- % afterItem: INTEGER);
- PROCEDURE InsMenuItem(itemString, afterItem);
- text itemString; short integer afterItem;
- begin
- text temp;
- temp:-text_string(itemString);
- TRAP.toolboxInsMenuItem(MenuHandle, temp, afterItem);
- new itemNotice.intoafter(afteritem);
- end;
-
-
- % PROCEDURE DelMenuItem(theMenu: MenuHandle; item: INTEGER);
- PROCEDURE DelMenuItem(item);
- short integer item;
- begin
- TRAP.toolboxDelMenuItem(MenuHandle, item);
- delNotice(item);
- end;
-
- ! ------------------- Local routines ----------- ;
- ref(head) itemsQ; ! list of items in this Menu ;
-
- link class ItemNotice;
- begin
- ref(macMenuitem) theItem;
- procedure intoafter(no); integer no;
- begin
- ref(link) p;
- P:-itemno(no);
- if p=/=none then follow(p);
- end -- into after --;
- end;
- ref(link) procedure ItemNo(no); integer no;
- begin
- integer counter; ref(linkage) p;
- p:-itemsQ.first;
- for counter:=2 step 1 until no do
- if p=/=none then p:-p.suc;
- ItemNo:-p;
- end;
- procedure delNotice(no); integer no;
- begin
- inspect itemno(no) do out;
- end;
-
- integer procedure ostype(thetext);text thetext;
- begin ostype:=rank(thetext.getchar)*16R1000000+
- rank(thetext.getchar)*16R10000+
- rank(thetext.getchar)*16R100+
- rank(thetext.getchar);
- end;
-
- ! -- init -- ;
-
- itemsQ:- new Head;
- Trap:-new toolboxmenu;
-
- end --- Mac Menu --- ;;